package com.hyt.it.ogt.kq.service.gov.service;

import java.io.File;
import java.util.List;
import java.util.Map;

import com.baomidou.mybatisplus.extension.service.IService;
import com.hyt.it.ogt.kq.service.gov.model.dto.TimeInfoResultDTO;
import com.hyt.it.ogt.kq.service.gov.model.entity.Time;
import com.hyt.it.ogt.kq.service.gov.model.param.TimeParam;
import com.hyt.it.ogt.kq.service.gov.model.vo.OfficeRoomVO;
import com.hyt.it.ogt.kq.service.gov.model.vo.TaskTimeInfoVO;
import com.hyt.it.ogt.kq.service.gov.model.vo.overview.ExamMonitorCollectVO;
import com.hyt.loginfo.model.User;

/**
 * <p>
 * 批次信息表 服务类
 * </p>
 *
 * @author huangyh
 * @since 2021-03-08
 */
public interface ITimeService extends IService<Time> {

    /**
     * 添加批次
     * @param timeParam 添加批次参数
     */
    void addOrUpdate(TimeParam timeParam, User user) throws Exception;

    /**
     * 删除批次或科目
     * @param timeId
     */
    void removeTimeOrSubject(String timeId);

    /**
     * 查询批次信息
     * @param taskId
     * @return
     */
    List<TaskTimeInfoVO> getTimeInfo(String taskId);

    /**
     * 获取考试系统批次信息返回结果
     * @param taskCode 考试任务编号
     * @param placeCode 考点编号
     * @return 批次信息返回结果
     */
    List<TimeInfoResultDTO> getTimeInfoResult(String taskCode, String placeCode);

    /**
     * 通过考试任务id获取批次数据
     * @param taskId 考试任务id
     * @return 批次数据
     */
    List<Time> getByTaskId(String taskId);

    /**
     * 获取考试监控数据
     * @param taskId
     * @param timeId
     * @return
     */
    ExamMonitorCollectVO getExamMonitorData(String taskId, String timeId);

    /**
     * 根据批次id查询考场信息
     * @param taskId
     * @param timeId
     * @return
     */
    List<OfficeRoomVO> getRoomListByTimeId(String taskId, String timeId);

    /**
     * 任务下所有批次是否存在跨天
     * @param taskId
     * @return
     */
    boolean isTimeCrossDay(String taskId);

    boolean exists(String taskId);

    void pushTime(String taskId);

    /**
     * 考试任务下是否存在指定id的批次
     * @param taskId 考试任务id
     * @param timeId 批次id
     * @return true：存在，false：不存在
     */
    boolean hasTime(String taskId, String timeId);


    /**
     * 根据批次科目id获取批次数据
     * @param timeSubjectId 批次科目id
     * @return 批次数据
     */
    Time getByTimeSubjectId(String timeSubjectId);

    /**
     * 根据考试任务id获取批次数
     * @param taskId 考试任务id
     * @return 批次数
     */
    Integer countByTaskId(String taskId);

    /**
     * 通过taskId查询
     * @param taskId
     * @return
     */
    List<Time>  queryByTaskId(String taskId);

    Map<String, String> getTimeMap(String taskId);

    /**
     * 生成批次dbf
     * @param taskId
     * @return
     */
    File exportTime(String taskId);
}
